/**
 * 链表翻转
 */
public class JZ24 {

    public static ListNode ReverseList(ListNode head) {

        //考虑空链表
        if(head==null) return head;

        //非空链表[只有一个节点,就不用翻转了]
        if(head.next==null) return head;

        //有多个节点就需要翻转
        ListNode current=head;//当前节点
        ListNode pre = null;//当前节点的前驱结点
        ListNode pnext = null;//当前节点的后继节点

        while(current!=null){
            pnext = current.next; //记录当前节点的后继节点
            current.next = pre; //断链,让当前节点的后继节点指向前驱节点
            //pre,current指针向后移动.
            pre = current; //前驱指针指向当前指针.
            current = pnext;//当前指向指向后继指针.
        }
        return pre;
    }


    public static void main(String[] args) {

        ListNode head=null;
        ListNodeTools tools = new ListNodeTools();//链表工具类
        Integer arr[] = new Integer[]{};
        head=tools.InitListNode(head,arr);//初始化链表

        System.out.println("没反转之前的链表:");
        tools.readFromHead(head);//从头遍历
        //do something
        head=JZ24.ReverseList(head);

        System.err.println("翻转之后的链表:");
        tools.readFromHead(head);//从头遍历

    }
}
